package world.snowcrystal.dao;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;


/**
 * 文章表 <code>t_article</code> 对应的实体类
 * @author 天晴
 * @since 1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("t_article")
public class Article {

    /**
     * 文章的表级 id，这是作为主键的字段o
     * @since 1.0
     */
    @TableId(type= IdType.AUTO)
    private Long id;

    /**
     * 文章可能带有特殊的格式，比如包含 Markdown 语法；
     * 或者文章格式为 HTML；这个字段以 MIME Type 方式指明了文章是哪种类型
     * 比如 Markdown 为 <i>text/markdown</i>
     * @since 1.0
     */
    private String mimeType;


    /**
     * 文章的全局唯一 id
     * @since 1.0
     */
    @TableField
    private String uuid;

    /**
     * 文章的浏览量
     * @since 1.0
     */
    private Integer viewCount;

    /**
     * 该文章是否允许评论
     * @since 1.0
     */
    private Boolean isCommentable;

    /**
     * 文章的标题
     * @Author 天晴
     * @since 1.0
     */
    private String title;

    /**
     * 作者信息
     * @Author 天晴
     * @see UserAuthenticationDetails
     * @since 1.0
     */
    private UserAuthenticationDetails author;

    /**
     * 文章的正文
     * @Author 天晴
     * @since 1.0
     */
    private String content;

    /**
     * 文章封面的链接，直接发给前端；让前端再去查图片的封面
     * @since 1.0
     */
    private String thumbnail;


    /**
     * 文章当前的状态，章的状态信息,
     * 这里粗略规定一些值的语义：
     * <p><code>0x00</code> 代表正常状态</p>
     * <p><code>0x01-0x0f</code> 代表该文章被标记为删除</p>
     * <p><code>0x1-0xf</code> 代表该文章来自于网络此时 content 的应该是一个地址</p>
     * <p><code>0x0</code> 代表该文章来自于本地服务器</p>
     * <p>状态值为删除的文章不应该被查询出来，在查询时需要总是需要删选掉已经被标记为删除的文章</p>
     *
     * @since 1.0
     */
    private Integer status;

    /** 文章的创建时间
     *
     * @since 1.0
     */
    private Date createTime;

    /**
     * 文章上一次的修改时间
     *  
     * @since 1.0
     */
    private Date lastModificationTime;


    /**
     * 文章的摘要信息
     * @since 1.0
     */
    private String summary;

    /**
     * 文章的类别
     * @since 1.0
     */
    private Integer categoryId;

}
